package com.wwy.arithmetic.suanfa;

import java.util.*;

public class ShanChu {
    public static void main(String[] args) {
        //力扣的校验逻辑
        int[] nums = new int[]{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}; // 输入数组
        int[] expectedNums = {0, 1, 2, 3, 4}; // 长度正确的期望答案

        int k = removeDuplicates(nums); // 调用
        System.out.println("k = " + k);

        assert k == expectedNums.length;
        for (int i = 0; i < k; i++) {
            if (nums[i] == expectedNums[i]) {
                System.out.println(true);
            }
            ;
        }
//        removeDuplicates(new int[]{0,0,1,1,1,2,2,3,3,4});
    }

    //    /**
//     * 使用普通方法来做
//     *
//     * @param nums
//     * @return
//     */
//    static int removeDuplicates(int[] nums) {
//        if (nums.length == 0) {
//            return 0;
//        }
//        if (nums.length == 1) {
//            return 1;
//        }
//        Set<Integer> set = new LinkedHashSet<>();
//        List<Integer> list = new ArrayList<Integer>();
//        for (int num : nums) {
//            if (set.add(num)) {
//                list.add(num);
//            }
//        }
//        for (int i = 0; i < nums.length; i++) {
//            if (i >= list.size()) {
//                nums[i] = 0;
//            } else {
//                nums[i] = list.get(i);
//            }
//        }
//        return list.size();
//    }

    /**
     * 第二种方法
     *
     * @param nums
     * @return
     */
//    static int removeDuplicates(int[] nums) {
//        if (nums == null || nums.length == 0) {
//            return 0;
//        }
//        int p = 0;
//        int q = 1;
//        while (q < nums.length) {
//            if (nums[p] != nums[q]) {
//                nums[p + 1] = nums[q];
//                p++;
//            }
//            q++;
//        }
//        return p + 1;
//    }

//    /**
//     * 第三种方法
//     * @param nums
//     * @return
//     */
//    static int removeDuplicates(int[] nums) {
//    int current = nums[0];
//    int count = 1;
//    //{0，1，2，3，4}
//    for (int i = 1; i < nums.length; i++) {
//        if (nums[i] == current) {
//            continue;
//        }
//        nums[count++] = nums[i];
//        current = nums[i];
//    }
//    return count;
//    } {0,1,1,2,2}
    static int removeDuplicates(int[] nums) {

        if (nums.length == 0) {
            return 0;
        }
        if (nums.length == 1) {
            return 1;
        }
        int a = 1;
        int target = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (target == nums[i]) {
                continue;
            }
            nums[a++] = nums[1];
            target = nums[i];
        }
        return a;
    }
}
